Procesamiento de imágenes satelitales meteorológicas con Python 2022.

Sergio Masuelli

Practico 4.

Objetivos:

  1. Hacer y analizar dispersogramas.

  2. Aplicar índices

  3. Realizar transectas.

  4. Entender los conceptos de submuestreo y sobremuestreo. Aplicar la técnica de Principal Component Analysis (PCA) para la fusión de imágenes.

  5. Filtros de bordes y corregistro de imágenes.

  6. Filtrado espacial de ruidos y realce de bordes,

Preparación:

Librerías y definición de funciones

En la siguiente celda se definen funciones especiales a usar en el práctico

Importación de datos:

Las imágenes de Landsat 8 que vamos a utilizar en este notebook se encuentran en una carpeta de Google Drive a la cual se accede mediante el siguiente link:

https://drive.google.com/drive/folders/1Ez7tD_RMZZA5I0WZ9dtwWmyJbvyNtStO?usp=sharing

Al hacer click en el link anterior (teniendo su cuenta de Google logueada), la carpeta LO82290822015256COA00 será agregada a la sección "Compartido conmigo" de su Drive personal. Hacer click entonces sobre la carpeta, presionar shift + z, seleccionar Mi unidad (notar que ya aparece seleccionada en color verde) y presionar el botón Añadir. Una vez hecho lo anterior, debería ver la carpeta LO82290822015256COA00 en su unidad principal de Drive

Luego monte su Drive personal

Verifique que accede al directorio "/content/drive/MyDrive/SATEC_alumnos/LO82290822015256COA00/" y debería ver los siguientes archivos:

LO82290822015256COA00_B1.TIF
LO82290822015256COA00_B2.TIF
LO82290822015256COA00_B3.TIF
LO82290822015256COA00_B4.TIF
LO82290822015256COA00_B5.TIF
LO82290822015256COA00_B6.TIF
LO82290822015256COA00_B7.TIF
LO82290822015256COA00_B8.TIF
LO82290822015256COA00_B9.TIF
LO82290822015256COA00_BQA.TIF
LO82290822015256COA00_MTL.txt
LO82290822015256COA00.jpg

Notas:

  1. El archivo .txt contiene los metadatos.

  2. L8 tiene 2 bandas extra respecto de L5: una más en el azul (1) y otra pancromática (9). En consecuencia respecto de L5 los nombres de las bandas se hallan desplazados en 1, i.e. la banda 2 de L8 corresponde a la banda 1 de L5.

Carga de las imágenes

Seleccionar el área de interés. Hacer un recorte que abarque las ciudades de Córdoba y Carlos Paz y aplicar un realce al 2% a cada banda. Luego borrar la información original no necesaria

Procesos

1. Dispersograma

Crear dispersogramas de algunas combinaciones de bandas. Para ello, utilizar la función matplotlib.pyplot.hist2d.

a. Obtener los dispersogramas de las bandas 1 y 2; 5 y 4; 6 y 3

b. Usar los dispersogramas para identificar los valores correspondientes al Lago San Roque y desplegar la imagen con este lago pintado de azul saturado

2. Generación de índices.

a. Generar una función que permita obtener índices normalizados para 2 bandas cualesquiera.

b. Obtener los índices normalizados para vegetación y para agua. Comparar estos resultados con los dispersogramas correspondientes y analizar su relación con la imagen.

c. Con los índices anteriores obtener un clasificador similar al realizado en el Práctico 3 y compare los resultados.

Podemos obervar una tendencia hacia la relacion lineal con mayor densidad de puntos en los sitios donde hay mayor porcentaje de vegetacion presente.

Podemos obervar una tendencia hacia la relacion lineal con mayor densidad de puntos en los sitios donde hay agua presente.

3. Transectas

a. Elija dos puntos, un bien dentro del lago y otro bien en la tierra.

b. Haga una función que determine los puntos que pertencen a dicha transecta.

c. Grafique los valores para las distintas bandas vs esos puntos. ¿Puede identificar la lı́nea de costa?

La linea de costa se encuentra a los 335 en x.

Y a los 535 en y aproximadamente.

Sirve tambien para armar el arbol de desicion para clasificar entre terreno y agua. Me concentro en la banda que de homogenea en el agua, la banda uno da bien.

4. Sobremuestreo y fusión de imágenes

La idea de este ejercicio es la de realizar un sobremuestreo de una imagen RGB (bandas 4, 3, 2) del Landsat mediante la aplicación de la técnica de PCA y la banda pancromática.

Realizar un recorte de la imagen RGB comenzando desde la esquina superior izquierda (coordenada [0, 0]) de 800x800 pixeles. Hacer lo mismo para la banda pancromática pero para un tamaño del recorte del doble que la anterior (1600x1600). Aplicar realce a las bandas y graficar

Aplicar la transformación PCA a dicho recorte de manera de obtener sus componentes principales. Luego graficar dichas componentes realzadas.

La matriz x_pca_3d contiene las componentes principales de la matriz RGBrec. En la primera banda se encuentra la componente principal 1 (CP1), en la segunda banda se encuentra la CP2 y en la tercera banda la CP3.

Hacer un remuestreo de la CP para llevarla a resolución de la PANCRO

Observe y compare CP1 contra PANCROrec, visualizando y realizando un scatterplot.

Realizar un sobre muestreo a CP2 y CP3 llevarlas a la resolución de la pancromática. Luego cargar las CP correspondientes pero poniendo en lugar de la CP1 la PANCRO reescaleada. Analice la correlación entre estas dos uĺtimas bandas.

Nota: Observe las dimensiones, puede que necesite hacer un reshape

Analice la correlación entre la CP1 y la PANCRO mediante un scatterplot

Compare las imágenes anteriores y vea cómo se incrementó la resolución espacial. Juegue con el zoom para ver los detalles en ambas imágenes.

A pesar de tener distinta tonalidad se pueden apreciar mas detalles en la imagen sobremuestreada, estos detalles hacen referencia al tendido de calles que puede observarse con mayor claridad en el uso de suelo urbano de la imagen.

5. Corregistro de imágenes

En esta parte del trabajo práctico vamos a trabajar nuevamente con las imágenes del Landsat 8 de la sección anterior para realizar un corregistro de bandas, pero las vamos a cargar a partir de los arrays de Numpy con extensión .npy.

Pregunta: ¿Qué tipo de defecto puede notar en la imagen? Parece que las bandas se encuentran corridas y eso genera turbidez en la definicion de la imagen.

Vamos a realizar un recorte sobre la imagen anterior, de manera de enfocarnos en alguna zona que contenga bordes o interfaces que nos ayuden a corregistrar las bandas. Para ello, hacemos un recorte de la imagen anterior de 200x200 píxeles comenzando en la coordenada superior izquierda [600, 800] y graficamos.

Para poder determinar de mejor manera el desplazamiento de las bandas, vamos a aplicar un filtro resaltabordes de Sobel para resaltar todos los bordes.

Observe que la imagen anterior ahora tiene resaltados todos los bordes y se hace evidente el desplazamiento entre las bandas R, G y B.

Tomando la banda R como referencia, ahora debemos determinar cuál es el desplazamiento de las bandas G y B respecto a ésta. Para ello, vamos a aplicar una correlación 2D entre las bandas.

Graficamos las correlaciones y vemos que nos da.

Preguntas: ¿Qué representan las imágenes de las correlaciones anteriores? ¿Donde debería estar el punto máximo si las imágenes se encuentran corregistradas? Las imagenes de correlacion muestran donde las imagenes se parecen mas. El punto en el centro muestra que las imagenes estan correladas, con el punto en el centro. El corrimiento lo mido restando los maximos en x e y respecto de la correlacion entre las bandas rojas. Podemos ver que la maxima correlacion entre la bandas rojas se enuentra en el centro, para las otras bandas vemos que es necesario desplazar para que coincidan las bandas. El punto deberia encontrarse en la misma posicion y como podemos apreciar este no lo esta.

A partir de las matrices de correlación obtenidas, podemos determinar cual es el corrimiento de cada banda respecto de la banda R.

Lo hace con otra funcion que se llama unravel. numpy es lo mas bajo de nivel que me puedo encontrar en python para computo cientifico, es lo mas rapido.

Desplazar las imágenes para corregistrarlas utilizando la función scipy.ndimage.shift().

6) Procesos para Filtrado de ruido y Realce de bordes:

1) Elija una de las bandas de la imagen LandsaTM 229-82, seleccione una región de 300x300 con paisajes variados alrededor del lago San Roque, recórtela y cárguela en un array de numpy.

2) Súmele un ruido uniforme de amplitud A y media 0,1.

3) Implemente un filtro como función que tenga como entradas la imagen y el kernel. El kernel debe ser una matriz de dimensión impar.

4) Genere distintos filtros de suavizado y resaltado.

5) Aplique el filtro de suavizado a la imagen y compare visualmente la imagen obtenida con respecto a la imagen original.

6) Utilice la función scipy.signal.correlate para realizar el mismo suavizado. Compare la imagen obtenida con la del punto anterior.

7) Aplique sucesivamente un filtro de resaltado y compare con la imagen original.

8) Idem punto anterior pero que el filtro pasa alto sea el de Sobel con a= b= 1.

9) Invierta el orden, es decir primero pase el filtro pasa alto y luego el pasabajo, compare con la imagen original.

1) Elija una de las bandas de la imagen Landsat 8 realzada, seleccione una región de 300x300 con paisajes variados alrededor del lago San Roque, recórtela y cárguela en un array de numpy.

2) Súmele un ruido uniforme entre valores de amplitud 0,1 y media 0.

3) Implemente un filtro como función que tenga como entradas la imagen y el kernel. El kernel debe ser una matriz de dimensión impar.

4) Genere distintos filtros de suavizado y resaltado.

Se ve tan feo porque lo que esta resaltando en este caso es el ruido.

5) Aplique el filtro de suavizado a la imagen usando la función scipy.signal.correlate y compare visualmente la imagen obtenida con respecto a la imagen original.

6 ) Aplique sucesivamente un filtro de resaltado y compare con la imagen original.

Quedan iguales.

Son lo mismo pero transpuesto por eso dan igual las imagenes.

7) Idem punto anterior pero que el filtro pasa alto sea el de Sobel.

8) Invierta el orden, es decir primero pase el filtro pasa alto y luego el pasabajo, compare con la imagen original.